/**
 * Event 事件类
 */
class Event {
    // 事件池：记录所有相关事件及处理函数,每个事件名对应多个处理函数
    events = {};

    // 添加事件
    on(eventName, fn) {
        if (!this.events[eventName]) {
            this.events[eventName] = [];
        }

        if (!this.events[eventName].includes(fn)) {
            this.events[eventName].push(fn);
        }
    }

    // 删除事件
    off(eventName, fn) {
        if (!this.events[eventName]) {
            return;
        }

        this.events[eventName] = this.events[eventName].filter(item => item !== fn);
    }

    // 触发事件
    dispatch(eventName, ...args) {
        if (!this.events[eventName]) {
            return;
        }

        this.events[eventName].forEach(item => item.call(this, ...args));
    }
}

export default Event;